package com.hkts.management.es.response;

import org.elasticsearch.common.text.Text;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 工具封装
 * 
 * @throws @author
 *             张勇
 * @date 2020/8/18
 */
public class ConvertUtil {
    // private Logger logger = LoggerFactory.getLogger(this.getClass());
    /**
     * 构造高亮器
     * 
     * @throws @author
     *             张勇
     * @date 2020/8/18
     */
    public static HighlightBuilder createHighlightBuilder(String... fieldNames) {
        // 设置高亮,使用默认的highlighter高亮器
        HighlightBuilder highlightBuilder = new HighlightBuilder()
            // .field("productName")
            .preTags("<span style='color:red'>").postTags("</span>");

        // 设置高亮字段
        for (String fieldName : fieldNames)
            highlightBuilder.field(fieldName);

        return highlightBuilder;
    }

    /**
     * 处理高亮结果
     * 
     * @throws @author
     *             张勇
     * @date 2020/8/18
     */
    public static List<Map<String, Object>> getHitList(SearchHits hits) {
        List<Map<String, Object>> list = new ArrayList<>();
        Map<String, Object> map;
        for (SearchHit searchHit : hits) {
            map = new HashMap<>();
            // 处理源数据
            map.put("source", searchHit.getSourceAsMap());
            // 处理高亮数据
            Map<String, Object> hitMap = new HashMap<>();
            searchHit.getHighlightFields().forEach((k, v) -> {
                String hight = "";
                for (Text text : v.getFragments())
                    hight += text.string();
                hitMap.put(v.getName(), hight);
            });
            map.put("highlight", hitMap);
            list.add(map);
        }
        return list;
    }

    /**
     * hit转list
     * 
     * @throws @author
     *             张勇
     * @date 2020/8/18
     */
    public static List<Map<String, Object>> hitToList(SearchHits hits) {
        List<Map<String, Object>> dataList = new ArrayList<>();
        Map<String, Object> map;
        for (SearchHit hit : hits) {
            // 处理源数据
            map= hit.getSourceAsMap();
            if(hit.getSortValues()!=null){
                map.put("sort",hit.getSortValues());
            }
//            if (hit.getSourceAsMap().get("messages") != null || "".equals(hit.getSourceAsMap().get("messages"))) {
//                List<String> imgs = getImageSrc(hit.getSourceAsMap().get("messages").toString());
//                if (!imgs.isEmpty()) {
//                    map.put("img", imgs);
//                }
//            }
            dataList.add(map);
        }
        return dataList;
    }

    /**
     * 从字符串中获取文本中的图片链接
     * 
     * @param htmlStr
     * @return { {@link Set <  String >}}
     * @throws @author
     *             张勇
     * @date 2020/8/19
     */
    public static List<String> getImageSrc(String htmlStr) {
        // htmlCode= "&lt;p&gt;&lt;span style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;近日，有卡友询问此时入手4米2蓝牌货车是否可行。看来，这其中的油水还是引得人蠢蠢欲动。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;img
        // src=&quot;http://img3.feijiu.net/eWebEditImg/2020/4/22/2020-04-22-11-35-41.jpg&quot; alt=&quot;&quot;
        // /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;自从按轴收费政策出台，网上一片哀嚎：“ 有人抱怨收费变高，有人抱怨系统故障频发，有人抱怨收费口变的更堵了……”
        // 但是轻卡们却沉浸在无限喜悦之中——它们能按二轴上限18吨上高速，也能按二轴最低标准交过路费！&lt;/span&gt;&lt;br /&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;4米2蓝牌货车又重新变成神车，在国家出台政策整治之前，它或许还能再潇洒一段时间。&lt;br
        // /&gt;&lt;/span&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;也不怪卡友心动，4米2货车几次春风得意后惨遭痛打，挣扎之际又起死回生，这其中的起起落落打了无数人的脸。&lt;/span&gt;&lt;br
        // /&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;这也难怪有卡友问，现在入手4米2，到底还能不能挣到钱？或许回过头看看，就能找到答案。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;color:#333333;font-family:-apple-system-font,
        // BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;span
        // style=&quot;color:#1D5AC9;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:17px;background-color:#FFFFFF;&quot;&gt;&lt;strong&gt;蓝牌4米2的第一次重大打击&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br
        // /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align:left;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;2019年5月21日，央视报道的一则关于轻卡空载就超载的新闻，使这个行业多年来的违规超标现象完全暴露出来。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:left;&quot;&gt;&lt;span style=&quot;color:#333333;font-family:-apple-system-font,
        // BlinkMacSystemFont, &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;img
        // src=&quot;http://img3.feijiu.net/eWebEditImg/2020/4/22/2020-04-22-11-36-06.jpg&quot; alt=&quot;&quot;
        // /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align:left;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;有关部门开始大力的整治大吨小标的现象，面对如此大的力度，不少人都放弃了超标轻卡，业内开始唱衰。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:left;&quot;&gt;&lt;span style=&quot;color:#333333;font-family:-apple-system-font,
        // BlinkMacSystemFont, &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;img
        // src=&quot;http://img3.feijiu.net/eWebEditImg/2020/4/22/2020-04-22-11-36-23.jpg&quot; alt=&quot;&quot;
        // /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align:left;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;然而，就当人们以为“蓝牌轻卡”或许将不再适合运输行业时，现实又再一次打了所有人的脸。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;color:#333333;font-family:-apple-system-font,
        // BlinkMacSystemFont, &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;color:#1D5AC9;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:17px;background-color:#FFFFFF;&quot;&gt;&lt;strong&gt;蓝牌4米2起死回生&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br
        // /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align:left;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;2019年12月17日，交通部一道特级明电，再一次给了“蓝牌轻卡”这类二轴车，不超过18吨即可上高速的权利。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:left;&quot;&gt;&lt;span style=&quot;color:#333333;font-family:-apple-system-font,
        // BlinkMacSystemFont, &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;img
        // src=&quot;http://img3.feijiu.net/eWebEditImg/2020/4/22/2020-04-22-11-37-28.jpg&quot; alt=&quot;&quot;
        // /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align:left;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;装的比同类二轴车只多不少，收取的费用却不到其他二轴车的30%。简直是吊打一切二轴黄牌车！蓝牌轻卡一跃成为了人们眼中的神车。甚至连收费站的收费员都在开始劝6米8的车主，把车卖了，再买个4米2吧！&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:left;&quot;&gt;&lt;span style=&quot;color:#333333;font-family:-apple-system-font,
        // BlinkMacSystemFont, &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;img
        // src=&quot;http://img3.feijiu.net/eWebEditImg/2020/4/22/2020-04-22-11-37-44.jpg&quot; alt=&quot;&quot;
        // /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align:left;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;4米2风头正旺，洋洋得意。然而，央视又再一次针对货车“大吨小标”的问题，进行了报道。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:center;&quot;&gt;&lt;span style=&quot;color:#333333;font-family:-apple-system-font,
        // BlinkMacSystemFont,
        // &amp;quot;font-size:12px;background-color:#FFFFFF;&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;span
        // style=&quot;color:#1D5AC9;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:17px;background-color:#FFFFFF;&quot;&gt;&lt;strong&gt;央视再报道，各方博弈&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:left;&quot;&gt;&lt;span style=&quot;color:#333333;font-family:-apple-system-font,
        // BlinkMacSystemFont, &amp;quot;font-size:12px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;超载的蓝牌货车专家：&lt;/span&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;蓝牌轻货成“大吨小标”重灾区&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:left;&quot;&gt;&lt;span style=&quot;color:#333333;font-family:-apple-system-font,
        // BlinkMacSystemFont, &amp;quot;font-size:12px;background-color:#FFFFFF;&quot;&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;厂家为何生产“问题车”？&lt;/span&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;车主为何选择“问题车”？&lt;/span&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;“问题车”如何办理注册登记和上牌照？&lt;/span&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;经销商又为何敢承诺“问题车”一定能上牌？&lt;/span&gt;&lt;br /&gt;&lt;span
        // style=&quot;font-size:16px;&quot;&gt;央视此次发声，再一次向人们揭示了轻卡背后的一条灰色利益链，这其中更牵扯到各方利益之间的博弈。央视的再次曝光，使个别省份开始对蓝牌轻卡改变收费模式。这都在向人们释放一个信号：面对疯狂的4米2“神车”，国家这次要来真的了！&lt;br
        // /&gt;&lt;p style=&quot;text-align:center;&quot;&gt;&lt;span
        // style=&quot;font-size:12px;&quot;&gt;&lt;/span&gt;&lt;span
        // style=&quot;font-size:17px;color:#1D5AC9;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;background-color:#FFFFFF;&quot;&gt;政策矛头直指蓝牌4米2&lt;/span&gt;&lt;span
        // style=&quot;font-size:12px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:left;&quot;&gt;&lt;span style=&quot;font-size:12px;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;近日，云南超限超载治理专项行动。经过普通公路超限检测站的货运车辆，必须按规定进站接受检测，经检测认定为违法超限超载运输的，必须卸载后方可放行，并按规定实施处罚和记分，实行“一超四罚”，按规定纳入失信名单。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:left;&quot;&gt;&lt;img
        // src=&quot;http://img3.feijiu.net/eWebEditImg/2020/4/22/2020-04-22-11-38-13.png&quot; alt=&quot;&quot;
        // /&gt;&lt;/p&gt;&lt;p style=&quot;text-align:left;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;2020年初，山西省人民政府发布《关于同意调整我省高速公路车辆通行费收费标准的回复》晋政函【2019】126号通知。其中，第六条特情处理指出：“车长小于6米但车货总质量超过4.5吨的2轴蓝牌1类货车，暂按2类货车收费标准计费。国家出台新的政策后，按新的政策执行”。&lt;/span&gt;&lt;/p&gt;&lt;p
        // style=&quot;text-align:left;&quot;&gt;&lt;img
        // src=&quot;http://img3.feijiu.net/eWebEditImg/2020/4/22/2020-04-22-11-38-28.png&quot; alt=&quot;&quot;
        // /&gt;&lt;/p&gt;&lt;p style=&quot;text-align:left;&quot;&gt;&lt;span
        // style=&quot;color:#333333;font-family:-apple-system-font, BlinkMacSystemFont,
        // &amp;quot;font-size:16px;background-color:#FFFFFF;&quot;&gt;2020年初，山西省人民政府发布《关于同意调整我省高速公路车辆通行费收费标准的回复》晋政函【2019】126号通知。其中，第六条特情处理指出：“车长小于6米但车货总质量超过4.5吨的2轴蓝牌1类货车，暂按2类货车收费标准计费。国家出台新的政策后，按新的政策执行”。&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;";
        List<String> imageSrcList = new ArrayList<String>();
        // Pattern p =
        // Pattern.compile("<img\\b[^>]*\\bsrc\\b\\s*=\\s*('|\")?([^'\"\n\r\f>]+(\\.jpg|\\.bmp|\\.eps|\\.gif|\\.mif|\\.miff|\\.png|\\.tif|\\.tiff|\\.svg|\\.wmf|\\.jpe|\\.jpeg|\\.dib|\\.ico|\\.tga|\\.cut|\\.pic)\\b)[^>]*>",
        // Pattern.CASE_INSENSITIVE);
        // String
        // regEx_img="img\\b[^>]*\\bsrc\\b\\s*=\\s*('|\")?([^'\"\n\r\f>]+(\\.jpg|\\.bmp|\\.eps|\\.gif|\\.mif|\\.miff|\\.png|\\.tif|\\.tiff|\\.svg|\\.wmf|\\.jpe|\\.jpeg|\\.dib|\\.ico|\\.tga|\\.cut|\\.pic))";
        // String regEx_img="img.*src\\s*=\\s*(.*?)[^>]*?";
        String regEx_img =
            "img.*src\\s*=\\s*(.*?)[^>]+(\\.jpg|\\.bmp|\\.eps|\\.gif|\\.mif|\\.miff|\\.png|\\.tif|\\.tiff|\\.svg|\\.wmf|\\.jpe|\\.jpeg|\\.dib|\\.ico|\\.tga|\\.cut|\\.pic)\\b[^>]*?";
        Pattern p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
        Matcher m_image = p_image.matcher(htmlStr);
        String img = "";
        while (m_image.find()) {
            // 匹配<img>中的src数据
            img = m_image.group();
            // logger.info("匹配img的数据{}",img);
            // Matcher ms = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);
            String link_image =
                "http:\\s*\"?(.*?)+(\\.jpg|\\.bmp|\\.eps|\\.gif|\\.mif|\\.miff|\\.png|\\.tif|\\.tiff|\\.svg|\\.wmf|\\.jpe|\\.jpeg|\\.dib|\\.ico|\\.tga|\\.cut|\\.pic)\\b[^>]*?";
            Matcher ms = Pattern.compile(link_image).matcher(img);
            while (ms.find()) {
                // logger.info(ms.group());
                imageSrcList.add(ms.group());
            }
        }
        return imageSrcList;
    }
}
